//定义用户相关的仓库
import { defineStore } from 'pinia'
//引入获取验证码的请求方法
import { reqCode, reqUserLogin } from '@/api/hospital'
//登录请求类型
import type { LoginData, UserLoginResponseData, UserInfo } from '@/api/hospital/type'
import type { UserState } from './interface'
import { GET_TOKEN, SET_TOKEN, REMOVE_TOKEN } from '@/utils/user'
const useUserStore = defineStore('User', {
  state: (): UserState => {
    return {
      //用于控制登录组件 Dialog 的显示与隐藏
      visiable: false,
      //存储用户的验证码
      code: '',
      //存储用户信息
      userInfo: JSON.parse(GET_TOKEN() as string) || ({} as UserInfo)
    }
  },
  actions: {
    //获取验证码的方法
    async getCode(phone: string) {
      //向服务器携带手机号码，获取验证码
      //正常开发，只需要发一个请求，后端就会将验证码推送到用户手机设备中
      //当前我们目前服务器不能向用户手机设备推送验证码（花钱）
      const result: any = await reqCode(phone)
      if (result.code == 200) {
        this.code = result.data
        return 'ok'
      } else {
        return Promise.reject(new Error(result.message))
      }
    },
    //用户手机号码登录的方法
    async userLogin(loginData: LoginData) {
      const result: UserLoginResponseData = await reqUserLogin(loginData)
      if (result.code == 200) {
        this.userInfo = result.data
        //本地存储持久化用户信息
        SET_TOKEN(JSON.stringify(this.userInfo))
        //返回一个成功的 Promise
        return 'ok'
      } else {
        return Promise.reject(new Error(result.message))
      }
    },
    //退出登录方法
    logout() {
      //清空仓库的数据
      this.userInfo = { name: '', token: '' }
      //清空本地存储的数据
      REMOVE_TOKEN()
    },
    //查询微信扫码的结果（看本地存储是否存储用户数据）
    queryState() {
      //开启定时器，每隔一段时间问本地存储是否拥有用户信息
      //有，关闭对话框
      const timer = setInterval(() => {
        //本地存储有数据，扫码成功
        if (GET_TOKEN()) {
          //关闭对话框
          this.visiable = false
          this.userInfo = JSON.parse(GET_TOKEN() as string)
          //清除定时器
          clearInterval(timer)
        }
      }, 3000)
    }
  },
  getters: {}
})

export default useUserStore
